The generation of high-resolution imagery is typically performed by a separate graphics processing unit (GPU) that interfaces with a central processing unit (CPU) of a device. Applications, such as, by way of non-limiting example, simulation applications, that provide highly detailed, high-resolution, high-framerate imagery on a display typically execute on a CPU and interface with a GPU via a graphics library, such as DirectX®, OpenGL® or OpenGL ES®. A graphics library, in turn, interfaces with the GPU through device drivers that are provided by the vendor of the GPU.
GPUs are increasingly programmable and allow an application to provide the GPU with one or more shaders, referred to herein as shader functions, that may then be executed by the GPU during the process of rendering an image. Various types of shader functions may be provided, including, for example, vertex shader functions, geometry shader functions, pixel shader functions, hull shader functions, and domain shader functions. Each shader function may utilize data that is stored in one or more constant buffers on the GPU during the rendering process to render an image. The format and ordering of the data in the constant buffers is typically unique and specific to the particular shader function.
A GPU and associated rendering pipeline are optimized to facilitate the generation of high-resolution images at a relatively high-frequency, such as hundreds of frames per second. A shader function may be called millions of times during the generation of each frame, and during each call the shader function may access the constant buffers that contain data for that shader function. Even the most trivial mismatch between what a shader function expects and what is in the constant buffers could result in data being rendered improperly or not rendered at all. In some cases it could even cause a degradation in performance or a crash in the graphics driver. Consequently, the data stored in the constant buffers is tightly controlled by the application responsible for the rendering of images, in this example, the simulation application.
Complex applications such as simulation applications are often manufactured by entities that specialize in the manufacture and support of such applications and are sold or licensed to third parties for use in training and the like. In some instances, it may be desirable to the third party to alter in some fashion the rendered imagery generated by the simulation applications, such as, for example, by altering the output of one or more shader functions based on the data in the constant buffers.